package br.com.gbvbahia.mybooks.modelos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;

import br.com.gbvbahia.mybooks.R;
import br.com.gbvbahia.mybooks.dao.contract.DB;
import br.com.gbvbahia.commons.modelos.EntityInterface;

public class EditoraVO implements EntityInterface {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String id;
	private String nome;
	private int sincronizado = DB.NOT_SINCRONIZADO;
	private long dataAlteracao = new Date().getTime();

	@Override
	public List<Integer> seValidar() {
		List<Integer> toReturn = new ArrayList<Integer>();
		if(StringUtils.length(nome) > 100){
			toReturn.add(R.string.aviso_63);
		}
		return toReturn;
	}
	
	@Override
	public void prepareUpdate() {
		dataAlteracao = new Date().getTime();
		sincronizado = DB.NOT_SINCRONIZADO;
	}

	@Override
	public void prepareInsert() {
		prepareUpdate();		
	}

	@Override
	public boolean gerarId() {
		return StringUtils.isBlank(id);
	}

	@Override
	public void setId(Serializable id) {
		setId(id.toString());
	}

	@Override
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = WordUtils.capitalize(StringUtils.lowerCase(nome));
	}

	public int getSincronizado() {
		return sincronizado;
	}

	public void setSincronizado(int sincronizado) {
		this.sincronizado = sincronizado;
	}

	public long getDataAlteracao() {
		return dataAlteracao;
	}

	public void setDataAlteracao(long dataAlteracao) {
		this.dataAlteracao = dataAlteracao;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		EditoraVO other = (EditoraVO) obj;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		return true;
	}

	public void setDateAlteracao(Date date) {
		this.dataAlteracao = date.getTime();
	}

	public Date getDateAlteracao() {
		return new Date(dataAlteracao);
	}
}
